                             - 11 -

                    1.  .

    1.   .

            
  :      IBM  PC    ?... 
  MS DOS?...   ?...    -
   ?    
 .     -    
 (    ?).    
          
.        . -
       -  -
         -
    BIOS.    
         -
,       ,  -
   -     8255.
             
.         /,
        ( 
      65535   ).   
         
  .        
[7.3.0].  . 1-1         -
   .

                             - 12 -

   1.1.1       8255.

        Intel 8255 -  ,
   ,      
.      .  
          .  
     .     
 ,    8253.  
  IBM  PC   AT     8255;  
         -
       .   AT
    ,    8255,    -
    .
    8255    ,   
 A   C.     60H  62H -
.      ,       B.
 PC,   7  B   1  , -
   A.    PC   2 
          C,    3
     XT.    :

    A (60H)
         B  7=0
          0-7 PC,XT,PCjr,AT: 8- -  
         B  7=1  PC
          0    PC: 0 =    
             1    PC:  
           2-3    PC:      
           4-5    PC:   (11 = ,
                      10 =  80*25, 01 =  40*25)
           6-7    PC:    

    B (61H)
          0    PC,XT,PCjr:   2  8253
             1    PC,XT,PCjr:   
             2    PC:    C
                  PCjr: 1 =  , 0 = 
             3    PC,PCjr: 1 =   
                  XT:    C
             4    PC,XT: 0 =  
                  PCjr: 1 =     
             5    PC,XT: 0 =    
             6    PC,XT: 1 =   
           5-6    PCjr:   (00 = 8253, 01 = ,
                  10 = /, 11 =  76496)
             7    PC:    A
                  PC,XT:  

                             - 13 -

    C (62H)
         B  2=1  PC   3=1  XT
       0-3    PC:    2 -
                   (   )
             0    PCjr: 1 =   
             1    XT: 1 =  . 
                  PCjr:   
             2    PCjr:   
           2-3    XT:      
             3    PCjr: 0 = 128K 
             4    PC,PCjr:   
                  XT:  
             5    PC,XT,PCjr:   2 8253
             6    PC,XT: 1 =    
                  PCjr: 1 =   
             7    PC,XT: 1 =   
                  PCjr: 0 =   
         B  2=0  PC   3=0  XT
       0-3    PC:    2 -
                   ( )
           0-1    XT:   (11 = ,
                  10 =  80*25, 01 =  40*25)
           2-3    XT:    (00 = 1  ..)
           4-7    PC,XT:  ,     

   ,   0        -
  "off".
   AT            MC146818
  Motorola,     .     
  8255,       
           -
.    64 ,   00  3FH.
               
 70H,            71H. 
          .
    :

                   
       10H               
       12H                
       14H             
       15H                 ( )
       16H                 ( )
       17H               ( )
       18H               ( )
       30H               1  ( )
       31H               1  ( )

                             - 14 -

    .

             -
.      ,  
 ,    IBM PC.   -
     A,  7  B   -
  1.  ,        
  0   ,    -
           
  .       ,
        .   
       255 ( ,
    )   
.        MID$   
   .      -
   .

100 A = INP(&H61)            '    B
110 A = A OR 128             '  7
120 OUT &H61,A               '     B
130 B = INP(&H60)            '    A
140 A = A AND 128            '  7
150 OUT &H61,A               '   B
160 GOSUB 1000               '   
170 NUMDISK$ = RIGHT$(B$,1)  '  
180 IF D$ = 1 THEN NUMDISK = 0: GOTO 230 ' 
190 C$ = LEFT$(B$,2)         '    
200 TALLEY = 0               '   
210 IF RIGHT$(C$,1) = "1" THEN TALLEY = 2 '  
220 IF LEFT$(C$,1) = "1" THEN TALLEY = TALLEY + 1 ' 
230 TALLEY = TALLEY + 1      '   1,    0
                             '   
1000 '''     
1010 B$ = ""                 ' 
1020 FOR N = 7 TO 0 STEP -1  '   2
1030 Z = B - 2^N             '
1040 IF Z >= 0 THEN B = Z: B$ = B$+"1" ELSE B$ = B$+"0"
1050 NEXT                    '   
1060 RETURN                  ' 

    .

         -
   ,         ,  
  .  ,      
    B.

   IN   AL,61H          ;    B
   OR   AL,10000000B    ;  7  1
   OUT  61H,AL          ; 
   IN   AL,60H          ;    A
   MOV  CL,6            ;   AL
   SHR  AL,CL           ; 2    6 
   INC  AL              ;   1,    0
   MOV  NUM_DRIVES,AL   ;  
   IN   AL,61H          ;    B
   AND  AL,01111111B    ;  7
   OUT  61H,AL          ; 

                             - 15 -

   1.1.2   IBM PC.

         IBM PC.
          IBM PC,  -
   ,       -
   ,    .    -
          FFFFE  ROM-BIOS,
    .

                             
                PC                     FF
                XT                     FE
                PCjr                   FD
                AT                     FC

    .

        PEEK   :

100 DEF SEG = &HF000        '   64K 
110 X = PEEK(&HFFFE)        '    
120 IF X = &HFD THEN ...    '...   PCjr

    .

     :

;---   :
   MOV  AX,0F000H           ; ES  
   MOV  ES,AX               ;
   MOV  AL,ES:[0FFFEH]      ; 
   CMP  AL,0FDH             ; PCjr?
   JE   INITIALIZE_JR       ;  

                             - 16 -

   1.1.3   MS DOS.

       MS DOS      ,
         
      .  
         MS DOS 
     ,   MS DOS 1.0.   
   ,      MS
DOS.           
 .  ,     
  ,       MS DOS.

    .

     30H   21H     MS  DOS.
   (2    2.10)     AL,  
   (10  2.10)   AH (  ,
   .1     AH,   1H). AL 
 0,     MS DOS   2.0.  
      BX  CX,   -
  0.

;---   MS DOS:
   MOV   AH,30H            ;   
   INT   21H               ;  
   CMP   AL,2              ;   2.
   JL    WRONG_DOS         ;  2,   

                             - 17 -

   1.1.4      .

          ,  
           ,   
    EGA,      .
    [4.1.6]         
  .     ,   -
    ROM-BIOS    0040:0010    
 1,           . 
    11   , 10 - 
  80*25, 01 -      40*25  00  EGA.
    EGA       00,
      . -
        EGA, 
,   ,       BIOS    
     .     
EGA       0040:0087.    0, 
EGA .     ,    3=0, EGA
  ,      1,   -
 .
      EGA,      
       -
   6845 [4.1.1]    
    .      0FH 
  3B4H,     ,    
     3B5H.   
  3D4H  3D5H.   ,   -
  0FFH;      
 ,       .
      ,    
    EGA:          
      ?      
  1     0040:0087;      , 
   ,      -  -
.          
350  ,          
IRGB   R'G'B'RGB,        
     IBM.      
    EGA.    -
   CL     12H  10H.
         0110  
  .         
  EGA.     BL,   0  64K, 1 - 
128, 2 -  192  3 -   256K  .

                             - 18 -

    .

           
  ,         
  :

100 '''  
110 DEF SEG = &H40         '    BIOS
120 X = PEEK(&H87)         '   EGA
130 IF X = 0 THEN 200      'EGA ,  
140 IF X AND 8 = 0 THEN... '  EGA
 .
 .
200 X = PEEK(&H10)         '   
210 Y = X AND 48           '  4  5
220 IF Y = 48 THEN ...     '...   (00110000)
230 IF Y = 32 THEN ...     '...   80*25 (00100000)
240 IF Y = 16 THEN ...     '...   40*25 (00010000)

          ,  
    EGA    .      
       
  &H3D4  &H3D5.

100 '''   
110 OUT &H3B4,&HF          '  
120 X = INP(&H3B5)         '   
130 OUT &H3B5,100          '    
140 IF INP(&H3B5)<>100 THEN... '   -   
150 OUT &H3B5,X            '  

    .

        .

;---   :
   MOV   AX,40H        ; ES    BIOS
   MOV   ES,AX         ;
   MOV   AL,ES:[87H]   ;  EGA
   CMP   AL,0          ;
   JE    NO_EGA        ; 0040:0087 = 0,  EGA 
   TEST  AL,00001000B  ;EGA ,   3
   JNZ   EGA_NOT_ACTIVE;  3=1,  EGA 
    .
    .
EGA_NOT_ACTIVE:
   MOV   AL,ES:[10H]   ;   
   AND   AL,00110000B  ;  4  5
   CMP   AL,48         ;  ?
   JE    MONOCHROME    ;  

          
  ():

                             - 19 -

;---     ?
   MOV   DX,3D4H       ;    6845
   MOV   AL,0FH        ;  
   OUT   DX,AL         ;  
   INC   DX            ;   
   IN    AL,DX         ;  
   XCNG  AH,AL         ; 
   MOV   AL,100        ;  100
   OUT   DX,AL         ; 
   IN    AL,DX         ;  
   CMP   AL,100        ; 
   JNE   NO_CARD       ;   
   XCNG  AH,AL         ;   
   OUT   DX,AL         ;  

                             - 20 -

   1.1.5      .

          AT (     )
  8255      -
  ,    .    [1.1.1] -
     .      
      (FAT) , 
    .    FAT
    :

                           

       FF            , 8 
       FE            , 8 
       FD            , 9 
       FC            , 9 
       F9            , 15 
       F8             

          .   
     DOS   BIOS  -
   .     [5.1.1]  
       FAT.  ,
      ,    
  .
    BIOS        , 
      .  
       
 .     0CDH,   
  ,     .   
        ,    
     .
   AT    ,        
     .    
       71H,      
   70H.      10H.  -
          7-4,    - 
 3-0.      0000   -
 , 0001 -      48
   ,  0010 -     (96 -
  ).         -
 12H.    7-4  3-0    -
 .  0000    .  
15       .
  ;      -    
,      AT.

    .

     1CH  21H    
.       DL,  0 = -
    , 1 = A,  ..     DX  
   FAT, AL  -       ,  CX -
   .  DS:BX   ,   
   FAT,   .   -
     A:

                             - 21 -

;---  
   MOV   AH,1CH        ; MS DOS
   MOV   DL,1          ;  A
   INT   21H           ; 
   MOV   DL,[BX]       ;  
   CMP   DL,0FDH       ;, 9 ?
   JE    DBL_9         ; ..

   BIOS AT  ,    .
  8  13H.      
DL,      DH,  
  CL    CH,        
AH (.  [5.4.8]).
     BIOS AT   .   
15H  13H,      DL.   AH
  ,   0 =  ,  1 =    
 , 2 =      3 =
 .      CX:DX -
    512 .

                             - 22 -

   1.1.6      .

     ROM-BIOS       ,
          .   
   ,    0040:0010. 
      ,     -
:
    0     1,   
   1        XT,AT:1 =  .  (PC,PCjr: .)
   2-3      11 =   64K (AT: )
   4-5        (11 = ,
            10 =  80*25, 01 =  40*25)
   6-7        (  0 = 1)
   8        PCjr:0 =  DMA (PC,XT,AT: )
   9-11       
   12       1 =    (AT: )
   13       PCjr:   (PC,XT,AT: .)
   14-15      

       .  -
 ,      
  0  6-7.  0   6-7 ,   -
   ;     -
    0.
            -
 BIOS. BIOS   2-    
     COM    (MS DOS  
  ).   -     , -
   ,      -
.        0040:0008.  COM1
  :0008,  COM2  - 000A.    
0,    .  ,  
  :0008    ,     000A - , 
   .
   AT          14H  
.    14H     70H,  
     71H.   
 :

    7-6   00 = 1 , 01 = 2 
        5-4   01 =    , 40 
              10 =    , 80 
              11 =    
        3-2    
          1   1 =  . 
          0   0 =  , 1 =  

    .

                
 BIOS.       
 .        -
       
 ( -  ).

                             - 23 -

100 DEF SEG = 0          '   
110 X = PEEK(&H410)      '   
120 IF X MOD 2 = 0 THEN 140 '  -  
130 PRINT " " '  
140 GOTO 160             '   
150 PRINT " "  ' 
160 ...                  '...

     COM1:

100 DEF SEG = 40H        '    BIOS
110 PORT = PEEK(0) + 256*PEEK(1) '    0
120 IF PORT = 0 THEN...  '...    COM1

    .

    11H BIOS      AX.
      .      
 .

; ---   :
   INT   11H         ;  
   TEST  AL,0        ; ?
   JZ    NO_DRIVES   ;,  
   AND   AL,1100000B ;  5-6
   MOV   CL,5        ;   
   SHR   AL,CL       ;   5 
   INC   AL          ; 1, ..    1

    .

           ,    
.            AT,
    :

   MOV   AL,14H      ; 
   OUT   70H,AL      ; 
   IN    AL,71H      ; 
   TEST  AL,10B      ;  1
   JZ    NO_COPROCESSOR ;  ,   

                             - 24 -

   1.1.7   .

   :  "   ?",-     .
       , 
   ?     
 ? , ,     , 
DOS          ?  
  10     64K,    -
     320K,      -
-  .         ,
    320K   , ,  
       
    ?
          .  PC 
XT           
 B     8255.    [1.1.1]
   . BIOS      
  0040:0013,       
.  PCjr  3   62H  ( C  8255) 
,       64K .  AT   
   .    15H ()  16H (-
)        
     (    : 0100H -
  256K, 0200H -  512K  0280H  512K  128K    
).   /  AT  -
  17H  18H (  512K).     1  
    30H    31H  (    512K,
  15 ).   AT  128K    ,
   7   33.        
     70H,      
 71H.
       ,       
     .  -
    16  ,   -
      16- , 
,   16K  .     
,           233.   
       ,  
233     .      -
 233,     .  -
     AT,      
         
.    AT  ,     
     .
             ,
 ,    -
    MS DOS.      
            .
   ,    ,
      .
      .      -
   ,      .  
        64K,   
    .     -
   ,     

                             - 25 -

       . -
,        13E2,    
   13E2     64K-  .
        
,          3E2  
.      [1.2.2]      
    -    ,    
   .
          
     .    
  ,  DOS      ,
    ,     
DOS (  ,    -
).          ,
       -
,      .  -
 [1.3.1]        4AH -
 21H.
           -
  .        
 ,       .  
    ,       ,  
 AX     8,    BX  -
      16-  .   
    .       
      BX ( , F000H ),  
  .     ,  
      ,   ES   
 .

    .

          64K ( 
PEEK   POKE        64K).   
          FRE.
    ,    
  .  BYTES  =  FRE(x)    BYTES 
 . BYTES = FRE(x$)    .   -
         -
   .  ,       
     CLEAR,   ,
    FRE     2.5  4    
-    .
        64K  
   .       
,      .   
  ,         
       /N.    
   .

                             - 26 -

    .

    12H BIOS     -
  AX       .   
      8255 ,   AT,
  /.      .  
,          ,  
   .
        16-  ,   
DOS,   4AH  21H.  ES    
 ,    :

;---     DOS
   MOV   AH,4AH        ;  
   MOV   BX,0FFFFH     ;   
   INT   21H           ;BX    

   AT   88H   15H   
 ,      -
      .  ,   
   1 .       -
    512  640  ,     -
.        
AX.

    .

             64K  
 64-  .     
 6  ,   ,   ,
    B000:0000 (, , A000:0000)  ,    
F000:0000 (, , C000:0000).

;---   :
   CLI                  ;  
   MOV   AX,CS          ;   
   AND   AX,0FFFH       ;  4 
   MOV   ES,AX          ;   ES
   MOV   DI,0           ;DI    
   MOV   CX,10          ;  10 
   MOV   BL,'X'         ;   'X'
NEXT:
   MOV   DL,ES:[0]      ;   
   MOV   ES:[0],BL      ; 'X'   
   MOV   DH,ES:[0]      ;  
   MOV   ES:[0],DL      ; 
   CMP   DH,'X'         ;  ,  ?
   JNE   GO_AHEAD       ; ,   
   INC   DI             ;  
GO_AHEAD:
   MOV   AX,ES          ;  
   ADD   AX,1000H       ;   64K
   MOV   ES,AX          ;   ES
   LOOP  NEXT           ;  
   STI                  ;  

                             - 27 -

                  2.  .

       ,    
   .    -
 .     -
,    ,      .  
     ,    ,
        . -
        -
.   ,    
,    ,       
.          
 ,    (CS:IP)   ,
   .    CS:IP   -
       . 
      .  
     IRET  (    ),
  ,  ,   
 CS:IP    ,     -
      .
      ,      
 .       ,  -
       ,  
         . -
          ,   
         
  .      
. ,        DOS
      BIOS  -
    .  ,   -
         
.         ,    
      -
           , 
    ,    .
       .    
   .       IP, 
  - CS.   1024     -
,       256 .  -
      .      0
   0000:0000,   1 -  0000:0004, 2 - 
0000:0008  ..     ,   -
 0000:0020,      8H (-
   ),     A5FE00F0.    ,
            IP:CS,
  4-    F000:FEA5.     
  ,   8H.  . 1-2 -
     21H.

                             - 28 -

   1.2.1    8259.

           IBM  PC
      
Intel 8259.        
 ,     .  8 -
 ,  AT,    16,     -
     IRQ0  IRQ7 (
IRQ0  IRQ15),     .   
    0.     8   AT
   8259;    
   IRQ2    IRQ3.       0-7
    8H  0FH;  AT  
 8-15     70H  77H.  -
   :

       .

   IRQ 0     
       1     
       2      /
          8     ( AT)
          9     IRQ2 ( AT)
         10  
         11  
         12  
         13  .  ( AT)
         14     ( AT)
         15  
       3     COM1 (COM2  AT)
       4     COM2 (  PCjr, COM1  AT)
       5       (LPT2  AT)
       6      
       7     LPT1

       [2.1.0]    ,
       ,   
  .    [3.1.0] -
         ;    
,     ,    -
      (       
 ).
    8259    ,  -
     .     
  (IRR)    ,  
   .   -
      .   
     (ISR). -
      .  ,   
,         (IMR), 
           .
         -
    21H [1.2.2]     
  20H [1.2.3].

                             - 29 -

   1.2.2 /   .

         ,
  [1.2.1].   ;  -
 ,       ( 
   )    .    
   .     
            
,     -  .
,       
,         
 .
            
.       
      ,     .
,      / 
       -
.

    .

             
( 9)   .      0,   
 ,   .    1,  
    .      ,
    1,   CLI.  
      -  STI.  -
         .  
    18.2        -
           ,  
   ,        
    .
    ,        
           
   .       -
,         STI,  
    .   ,  
    CLI   STI,      
,       .
             
              21H,
       (IMR).  
       8259  AT (IRQ8-15)    
 A1H.       ,   
 ,    .    
  .     -
 .         ,
         -
.

;--- 6-    
   MOV   AL,01000000B   ;  6
   OUT   21H,AL         ;    
    .
   MOV   AL,0           ;
   OUT   21H,AL         ; IMR   

                             - 30 -

   1.2.3   .

           -
. -,    , 
 ,  ,   , -
   ,          
.   ,      
,       .   ,
              
     ,   , 
      [1.3.4].  
  INT 80H   WRITE_VERTICALLY ( -
,      ,   -
).
          
-     .    
      .
    BIOS     
,       ,       
 (    IRET).    
    ,     .
       
  .          
 [2.1.0],      18.2   -
.       , 
      ,    .  
           -
  ,          .
  -      Ctrl-Break
[3.2.8], PrtSC  [3.2.9]           
[7.2.5].    [6.3.1]    [7.1.8]
        -
/   .
   ,     ,   -
       , -
    .   [1.2.4]    -
    ,    -
  .

    .

     25H  21H    
 .        .   
    (CS),    (IP).
  ,        ,
      DS,    DX  (
  ).    -
   AL   .      
    RET,  IRET. (IRET 
   ,      ,     RET
      .       
    ,   IRET,  
  .) ,   25H   -
       , 
  ,     
,   .

                             - 31 -

;--- 
   PUSH  DS             ; DS
   MOV   DX,OFFSET ROUT ;    DX
   MOV   AX,SEG ROUT    ; 
   MOV   DS,AX          ;  DS
   MOV   AH,25H         ;  
   MOV   AL,60H         ; 
   INT   21H            ; 
   POP   DS             ; DS

;--- 
ROUT  PROC  FAR
      PUSH  AX          ;   
       .
       .
      POP   AX          ; 
      MOV   AL,20H      ;    
      OUT   20H,AL      ;   
      IRET
ROUT  ENDP

             
  2  :

         MOV   AL,20H
         OUT   20H,AL

      ,   (20H)        
.        -
,    8259     -
,            
  ,    .    
       ,   
                
Ctrl-Alt-Del   .  ,     
    ,    
 ,    1CH,  -
      [2.1.7].
     ,     -
  .      -
         
  ,         .   35
  21H       ,
    ES,    BX.  
       ,  
 ,    ,       
  25H ( )    .
:

;---  :
   KEEP_CS  DW    0        ;   
   KEEP_IP  DW    0        ;  
;---  
            MOV   AH,25H     ;  
            MOV   AL,1CH     ; 
            INT   21H        ;   ES,   BX
            MOV   KEEP_IP,BX ; 
            MOV   KEEP_CS,ES ; 

                             - 32 -

; ---  
            CLI
            PUSH  DS         ;DS  
            MOV   DX,KEEP_IP ;  
            MOV   AX,KEEP_CS ;
            MOV   DS,AX      ;  
            MOV   AH,25H     ;  
            MOV   AL,1CH     ; 
            INT   21H        ; 
            POP   DS         ; DS
            STI

      ,      
.        
,    ,  DS   -
 (          
).       ,  
     Ctrl-Break      
,      ,    
  Ctrl-Break    [3.2.8].

    .

      MS  DOS       
      .     
      4. , 
   16H  ES:BX:

;---   16H
   SUB   AX,AX         ; ES   
   MOV   ES,AX         ;
   MOV   DI,16H        ;   DI
   SHL   DI,1          ;  2
   SHL   DI,1          ;  2
   MOV   BX,ES:[DI]    ;    BX
   MOV   AX,ES:[DI]+2  ;    ES
   MOV   ES,AX         ;

        , 
 DOS.        -
          
        DOS.

                             - 33 -

   1.2.4    .

      ,          -
 .      ,
         
     (  ).
   ,       -
     0  16H BIOS [3.1.3].  
     DOS     BIOS 
    .    -
   16H,   ,   
  ,     
 ,     ,  
    .
   ,    BIOS  DOS ,  -
 BIOS   ,  DOS     
       .      
 ,     /   -
  ,         
  DOS    BIOS.  ,    
16H,           -
  16H.      16H  
    -   ,  ,  60H.
       60H,  -
    16H;     -
  16H,    , -
     16H,   -
       ,    
       ,       
 16H.        ,    
   ,  ,      -
 60H.  . 1-3    .  -
   :

   1.   ,   60H.
   2.     16H  60H.
   3.   16H,      .
   4.  ,    [1.3.4].

                             - 34 -

    3.  .

          ,  ,  
     .  -
     .    
        -
  .         
              
("")        (  
 ,    
      ).     
     .     DOS
        COMMAND.COM,
        -
     COPY  DIR.
        : .EXE  .COM. 
        64K,      
  ,  DOS    .    -
 COM       ,  
   .  COM     -
 .     ,  , -
       (PSP).    -
  100H ,    
DOS   ; PSP     -
  / [5.3.5].    EXE   DS 
ES   PSP.  COM  CS    
PSP.   ,  MS DOS 3.0  ,   
  PSP.    62H  21H;   
   ,   BX   .
      ,     PSP,  
,        DOS,  
    .   -
   RET ,       -
    (  IP)    PSP,  
         .
      [1.3.4]  [1.3.6].

        PSP:

              
     0H       DW             DOS  
     2H       DW              
     4H       DW           
     6H       DD               DOS
     AH       DD             (IP,CS)
     EH       DD              Ctrl-Break (IP,CS)
    12H       DD               
    16H     22        
    2CH       DW              
    2EH     46       
    5CH     16         1 ( FCB)
    6CH     20         2 ( FCB)
    80H    128        DTA  /
                             

                             - 35 -

   1.3.1   .

    MS DOS   ,     
  ,    COMMAND.COM   -
    ,     -
.           
.         -
,          
            
  .        
   :

   ZSEG    SEGMENT
           ;
   ZSEG    ENDS

     IBM PC ZSEG      ,  
    .    -
         .
       MOV AX,ZSEG  AX
        .
            ,     
     ,      .
        ,  
           
.      MS DOS   -
 640K       
   .   -   
 ,         
  ,  ,       -
 (64K).      ,  DOS 
  .     -
.   MS DOS    ,    
  .        
,          . 
 DOS ,      
 DOS, ,      [1.3.4]
      [1.3.2].
       ,   (    
   )        -
.  ,   , DOS  16-  -
   ,        
 .  5      -
:

    0     ASCII 90 -     , 
              ASCII 77.
    1-2  0   
    3-4     16- 

   DOS     .      -
    .     -
 DOS         ,  
,    ,     

                             - 36 -

 ..,    .  1-4.     -
      DOS,     -
 .       ,
       DOS      
.
   MS DOS       , 
 48H  4AH  21H.   48H   , 
49H -   .      ("SETBLOCK") -
   ,   ;   
      .     
        .   
            .
         -
.

    .

         21H 
16-      ,      .
     ,      
(      0  ).   
           ,
    16.  ,    ,  BX  
 16-      (),    
  .      -
,      ,     AX  
,  .    :

   7      
   8       
   9      

     7  8,   - 7
 9,             
.       ,   1024
.   BX      16- -
,            AX:0  (..
 0     ,    AX).  
      ,      -
 .            AX
  ES. DOS        -
   .

;---   1024 
   MOV   AH,48H      ; 
   MOV   BX,64       ; 64 
   INT   21H         ;  
   JC    ERROR       ;    
   MOV   BLOCK_SEG,AX;   
    .
;---   
   MOV   AX,BLOCK_SEG ;   
   MOV   ES,AX        ;   ES
   MOV   AH,49H       ;  
   INT   21H          ;  

                             - 37 -

   ,     4AH.  ES -
    PSP, ..     ,  
  .      ES 
 .    SETBLOCK    
       (  ES  ),
        -
.
   BX         16- .
      ""
   .      IBM  PC 
    ,     
    ,  ,      -
  "ZSEG".       -
    .    -
   ,     ,  -
  ,   .    -
   ES  DS      
       ;   COM  CS
    ,   EXE    .
;---  (ES    )
   MOV   BX,ZSEG      ; #    + 1
   MOV   AX,ES        ; #   
   SUB   BX,AX        ;    
   MOV   AH,4AH       ; 
   INT   21H          ; 
   JC    MEMORY_ERROR ;  

;---
   ZSEG      SEGMENT
   ZSEG      ENDS

                             - 38 -

   1.3.2     .

   MS  DOS   EXEC ( 4BH   21H),
        .   
 "",     - "".

    .

       3.0   SHELL.    
         
  .    SHELL _.
         
   ,     
     .    _   , 
    COMMAND.COM     
.        MS DOS,  
     ,   -
 EXIT.
          SHELL.  -
        ,      
   .   -
     ,       ,
      .   
      .

    .

    4BH  ,  ,   -
 :

   1.    ,  .
   2.   .
   3.  ,    ,    -
.
   4.    SS  SP  .

        MS DOS     -
 ,        .  
    ,        
.   [1.3.1]       
SETBLOCK.        ,    
  BX   16- ,  4AH
 AH    21H,    
  ,   .
      ,          ES:BX  
14-   ,        -
 :

   DW      
   DD       
   DD       FCB
   DD       FCB

                             - 39 -

     -  ,      -
,   MS DOS   . -
     ,        -
   CONFIG.SYS.   ,       
VERIFY  = ON.       , 
  ASCII 0,      ..  -
      ASCII 0.  
    (..      16 -
   ).   ,    
 ,   ,    2--
   .     ,   
         ,     "-
".          ASCII 0 
 2   .
     4          
    .  " " -  -
 ,    .  -
   DOS      EDITOR  A:CHAPTER1\
NOTES.MS.         
   A     .   
    EXEC,    -
   ,       .
     ,   
,      <> (ASCII 13).
    8        
   (FCB).  FCB        
,     .      
,       8   ASCII 0.    [5.3.5]
,   FCB.    MS DOS 2.0, -
 FCB        FCB,
         (file
handler),           
,    FCB (   [5.3.5]).
   ,          ,
     .       .
DS:DX         EXEC.   -
   ASCIIZ, ..   ,    
  ,      ASCII 0.  , 
   B:\NEWDATA\FILER.EXE<NUL>,   <NUL> -
  ASCII 0.
         , 
 .       -
 ,        , 
       ,    
  .      -
.     DS   ,  
    ,       -
  MOV AX,DSEG   MOV  DS,AX.     SS  SP
,    0   AL,     "  
" (EXEC         [1.3.5]). 
 4AH  AH    21H.    -
  ,   ""   -
 .  MS DOS    
     ,    
    .   [7.2.5]     .
     ,     
   ,   AX     
 1 -    , 2 -   
,  5  -   , 8 -   , 10  -
     11 -   .

                             - 40 -

     -     ,   
    .          
  .   ,    
           ,
    .     -
  ,    ()     -
  SS  SP.

;---  
FILENAME     DB   'A:TRIAL.EXE',0  ; TRIAL.EXE
PARAMETERS   DW   7DUP(0)          ;  
KEEP_SS      DW   0                ;  SS
KEEP_SP      DW   0                ;  SP

;--- 
   MOV   BX,ZSEG          ; #  
   MOV   AX,ES            ; #  
   SUB   BX,AX            ;  
   MOV   AH,4AH           ; 
   INT   21H              ;
;---   
   MOV   AX,SEG PARAMETERS      ; ES - 
   MOV   ES,AX                  ;
   MOV   BX,OFFSET PARAMETERS   ; BX - 
;---  SS  SP
   MOV   KEEP_SS,SS       ; SS
   MOV   KEEP_SP,SP       ; SP
;---    
   MOV   DX,OFFSET FILENAME     ; -  DX
   MOV   AX,SEG FILENAME        ; -  DS
   MOV   DS,AX                  ;
;--- 
   MOV   AH,4BH           ; EXEC
   MOV   AL,0             ; "  "
   INT   21H              ; 
;---,  
   MOV   AX,DSEG          ; DS
   MOV   DS,AX            ;
   MOV   SS,KEEP_SS       ; SS
   MOV   SP,KEEP_SP       ; SP

;---     
ZSEG     SEGMENT          ;. [1.3.1]
ZSEG     ENDS

                             - 41 -

   1.3.3       -
.

           
   DOS,    DIR  CHKDSK.  
    ,    
   COMMAND.COM.         
     ,     
          
        .

    .

     3.0     COMMAND.COM  
 SHELL.  SHELL   [1.3.2]. COMMAND.COM -
     ,    SHELL, 
  MS DOS.        
  DOS,   .     
   EXIT.

    .

       ,   [1.3.2]  
  .          ,
     , ,  ASCII 13. 
   COMMAND.COM    /C   
(.  "     " 
 MS DOS).      ,   -
 COMMAND.COM,          
.       A:,  COMMAND.COM  
    B:,  :

   COMMAND_LINE   DB   12,'B: /C DIR A:',13

           
 ,    [1.3.2]:

   LEA   BX,PARAMETERS            ;   -
   MOV   AX,OFFSET COMMAND_LINE   ;  . 
   MOV   [BX]+2,AX                ;  1- 2  
   MOV   AX,SEG COMMAND_LINE      ;  . 
   MOV   [BX]+4,AX                ;  2- 2  

                             - 42 -

   1.3.4      .

   ,     ,   
    .    -
     . MS DOS -
       ,   
   ,     -
.       COM,  -
   [1.3.6].  ,    EXE -
     .
       27H   
 .  CS      PSP  ,  
  .   COM, CS  -
    ,      
   27H.    EXE , CS  
   ,    PSP (.. 100H).  -
  EXE    RET  -
         : PUSH DX / MOV
AX,0  / PUSH AX.   DS     
PSP,           -
    0  PSP,      
 INT 20H.  INT  20H ,   -
         DOS.
 . 1-5   .     27H
   EXE    27H      PSP
(      INT),   
  RET.         -
  27H, DX      -
,    PSP.

    .

         25H -
 21H,       [1.2.3]  (   
70H).   ,     IRET.   
 ,      -
,    ,  DX  -
     .   COM  
    INT 27H   .    EXE  
       PSP   
  RET.     , -
     INT 70H.
         (COM  EXE).   
   FINISH      
(,   $           
).   COM  FINISH     PSP,  
    27H.    EXE   -
    ,   PSP,    -
  100H,      PSP. ,
       ,     
       .  
     MOVSB   
        PSP,   
60H,   160  .

                             - 43 -

     COM:
;---  
BEGIN:     JMP   SHORT SET_UP  ;  
ROUTINE    PROC  FAR
           PUSH  DS            ; 
            .
      ()
            .
           POP   DS            ; 
           IRET                ;  
FINISH     EQU   $             ;  
ROUTINE    ENDP

;---  
SET_UP:    MOV   DX,OFFSET ROUTINE  ;   DX
           MOV   AL,70H             ;  
           MOV   AH,25H             ;  
           INT   21H                ; 
;--- ,  
           LEA   DX,FINISH          ; . 
           INT   27H                ;

     EXE:

;---  
           JMP   SHORT SET_UP   ;  
ROUTINE    PROC  FAR
           PUSH  DS             ; 
            .
       ()
            .
           POP   DS             ; 
           IRET                 ;  
FINISH     EQU   $              ;  
ROUTINE    ENDP

;---  
SET_UP:    MOV   DX,OFFSET ROUTINE  ;   DX
           MOV   AX,SEG ROUTINE     ;   DS
           MOV   DS,AX              ;
           MOV   AL,70H             ;  
           MOV   AH,25H             ;  
           INT   21H                ; 
;--- 
           MOV   DX,FINISH+100H     ;  
           MOV   BYTE PTR ES:1,27H  ; 27H  PSP
           RET                      ; 

    31H  21H  ,  
,   DX       16- ,
    (  ,    
 PSP - .    [1.3.1]).    
  ,       ,
      .    
        4DH   21H.   
   [7.2.5].

                             - 44 -

   1.3.5     .

    -   ,    ,  
        .    
,    -  ,     
      .   
         ,  -
  .  ,      -
  ,       -
 .       .  
     ,     -
,        ,  -
    .

    .

   MS DOS     EXEC      . 
,  4BH  21H,    -
       ,      0 
AL  [1.3.2].    AL   3,     
.      PSP,    -
    .      
 ,    .
         .   
     ,   
      .  
EXEC    ,   , 
  .      
,        ,  
  , .   ,   
   MS DOS    -
 .
           
.   DOS     , 
       4AH. -
  48H       ,     
    .     -
     AX,       
  ,          
  .     
 [1.3.1].
     3,    AL,     
   . DS:DX    , -
    ,   ASCII 0.  
      ,    .COM  .EXE,
 DOS     ,    
.
   ,  ES:BX    4-  ,
  (1) 2-  ,   -
     (2) 2-  ,    
         ( -
  [1.3.6]).       
,    AX,     
.       ,     
      . -

                             - 45 -

  ,    .    
 ,      .  
      ,      
 ,      .   -
   ,         -
  AX.    1,     , 2 -
   , 5 -      8 -  -
  .
          ,     -
       (far)  .     
     ,   
.        
.           
          
 16 (     ).   -
      OVERLAY_OFFSET    CODE_SEG 
      .  -
,         CALL DWORD
PTR OVERLAY_OFFSET.
               
  ,         
  .        
       DS.

;---    (. [1.3.1]):
ZSEG         SEGMENT
ZSEG         ENDS

;---  
OVERLAY_SEG    DW    ?
OVERLAY_OFFSET DW    ?             ; 
CODE_SEG       DW    ?             ;  - 
PATH           DB    'A:OVERLAY.EXE' ;  
0BLOCK         DD    0             ;4-  

;--- 
   MOV   CODE_SEG,CS     ;  CS
   MOV   AX,ES           ;   PSP
   MOV   BX,ZSEG         ;   
   SUB   BX,AX           ; 
   MOV   AH,4AH          ;  SETBLOCK
   INT   21H             ; 
   JC    SETBLK_ERR      ;    
;---   
   MOV   BX,100H         ;   1000H 
   MOV   AH,48H          ;  
   INT   21H             ; AX:0   
   JC    ALLOCATION_ERR  ;    
   MOV   OVERLAY_SEG,AX  ;   
;---     
   MOV   AX,CODE_SEG     ;   
   MOV   BX,OVERLAY_SEG  ;   
   SUB   BX,AX           ;BX   
   MOV   CL,4            ;    4  
   SHL   BX,CL           ;    
   MOV   OVERLAY_OFFSET,BX  ; 

                             - 46 -

;---  
   MOV   AX,SEG BLOCK    ;ES:BX    
   MOV   ES,AX           ;
   MOV   BX,OFFSET BLOCK ;
   MOV   AX,OVERLAY_SEG  ;    
   MOV   [BX],AX         ;   
   MOV   [BX]+2,AX       ;  -  
   LEA   DX,PATH         ;DS:DX     
   MOV   AH,48H          ;  EXEC
   MOV   AL,3            ;  
   INT   21H             ; 
   JC    LOAD_ERROR      ;    
;---    
    .
    .
   CALL  DWORD PTR OVERLAY_OFFSET  ; 
    .     ;  DWORD PTR,    -
    .     ; 

;---  ,    
DSEG     SEGMENT     ; ,   
            .        ;   (
            .        ;  )
DSEG     ENDS

CSEG     SEGMENT     PARA PUBLIC 'CODE'
OVERLAY  PROC FAR      ; "" 
         ASSUME CS:CSEG,DS:DSEG
         PUSH   DS     ; DS  
         MOV    AX,DSEG; DS 
         MOV    DS,AX
          .
          .
         POP    DS     ; DS  
         RET
OVERLAY  ENDP
CSEG     ENDS
         END

                             - 47 -

   1.3.6     .EXE   .COM.

            
       EXE   COM.   EXE
 ,    ; DOS -
      .    ,
  COM    ,       -
      ,        
    .     EXE  
  768     ,   COM  (
        ). 
COM   ,      .
    ,     -
   ,        COM.
    -    ,   -
  .   ,       
   :
   MOV   DX,OFFSET DATA_AREA
   MOV   AX,SEG DATA_AREA
   MOV   DS,AX
  DX        DS.  
      DS?    -
 ,    ,     
DATA_AREA   ,       
 -          MS  DOS,    ,
          
.         -
        -
  .  ,  DOS  -
,        -
  ,   ,     
.  . 1-6   .
     COM     ,     
 ,      .   
    ,    -
  .             
65535     ,     ,
           (
     ,   
          65535 , 
         
64K  ).    COM    -
   PSP;    EXE,  DS  ES -
    ,    CS     
  PSP.
          COM  -
  :

   1.         .   ,
    ,  START,   -
  END START.
   2.      ORG 100H.  -
    (..     ).

                             - 48 -

 COM      100H,      ,
   PSP,  CS    PSP,  
  100H  .      
      100H  JMP.
   3.     ASSUME   DS, ES   SS  
,         ,
, ASSUME CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG.
   4.         ,
  ,      .    -
    ,     
      ,     
  ,    .     
        -
 JMP.
   5.          MOV  AX,SEG
NEW_DATA.     .  ,
    ,      
  , MOV AX,DSEG / MOV DS,AX.
   6.           .
      -
 64K,      (,    
  ).   COM      
64K, SS  SP   .  ,   -
      , ,
   .  .
   7.      RET,  
20H.     20H -       
       DOS.    -
   RET,     
20H.    ,      -
 0.       RET, 0
   ,        
PSP.       20H,   -
  ,       DOS.
  ,          
  DS  0 (PUSH DS / MOV AX,0 / PUSH AX),    
 EXE .

            , -
     .      
 COM c   EXE2BIN,   MS DOS.  
,   MYPROG.EXE,   -
  EXE2BIN MYPROG.       
   MYPROG.BIN.        -
 -        MYPROG.COM.     
   EXE2BIN MYPROG MYPROG.COM,  -
    COM.

    .

         , 
        
          .    
       ,      COM
.

                             - 49 -

CSEG          SEGMENT
              ORG 100H
              ASSUME CS:CSEG, DS:CSEG, SS:CSEG
;---
START:        JMP  SHORT BEGIN  ;  
MESSAGE1      DB   'The dip switches are set for $'
MESSAGE2      DB   'disk drive(s).$'
;---   
BEGIN:        MOV  AH,9    ; 9  21H - 
              MOV  DX,OFFSET MESSAGE1  ;
              INT  21H     ; 
              PUSH AX      ;    
;---     A  8255
              IN   AL,61H  ;    B
              OR   AL,10000000B  ;  7
              OUT  61H,AL        ; 
              IN   AL,60H        ;  .
              AND  AL,11000000B  ;  2 
              MOV  CL,6          ;   AL 
              SHR  AL,CL         ; 2   
              ADD  AL,49         ; 1,    1
                                 ; 48    ASCII
              MOV  DL,AL         ;   DL
              MOV  AL,61H        ;   B
              AND  AL,01111111B  ;  7
              OUT  61H,AL        ; 
;---  
              MOV  AH,2          ; 2  21H
              INT  21H           ;   DL
;---   
              POP  AX            ;    
              MOV  DX,OFFSET MESSAGE2
              INT  21H           ; 
              INT  20H           ; 
CSEG          ENDS
              END START